SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_TDORDE_FACT_D01]  
/*-------------------------------------------------------*/    
/*---Empresa              : OFISIS S.A.                --*/    
/*---Cliente              : OFISIS                  --*/    
/*---Sistema              : Tesoreria                  --*/    
/*---M«dulo               : Empresa                    --*/    
/*---Programa             : Borrado Guias Ingreso (O/C-O/S) --*/    
/*---Script               : SP_TDORDE_FACT_D01.sql     --*/    
/*---Nombre SP            : SP_TDORDE_FACT_D01         --*/    
/*---Desarrollado por     : Javier Flores A.           --*/    
/*---Fecha Creaci«n       : 10/03/2000                 --*/    
/*---Base Datos           : Microsoft Sql Server       --*/    
/*---Versi«n              : 7.0                        --*/    
/*---Invoca a SP          :                            --*/    
/*-------------------------------------------------------*/    
/*-------------------------------------------------------*/    
/*---Modificado 1 por     : Maribel Julca Rodriguez    --*/    
/*---Fecha Modificaci©n   : 21/04/2005                 --*/     
/*---Detalle Modificaci©n : ingreso de los campos CO_USUA_CREA, CO_USUA_MODI  --*/    
/*-------------------------------------------------------*/    
/*-------------------------------------------------------*/    
/*---Modificado 2 por     : Carlos Marquez Escobar   --*/    
/*---Fecha Modificaci©n   : 16/09/2005                 --*/     
/*---Detalle Modificaci©n : O/C serv atend. en base a Totales  --*/    
/*-------------------------------------------------------*/    
/*-------------------------------------------------------*/    
/*---Comentarios                                       --*/    
/*---                                                  --*/    
/*---                                                  --*/    
/*-------------------------------------------------------*/    
/*-------------------------------------------------------*/    
/* DROP PROC SP_TDORDE_FACT_D01     */    
/* GRANT ALL ON SP_TDORDE_FACT_D01 TO PUBLIC     */    
/* SP_TDORDE_FACT_D01                                    */    
/*-------------------------------------------------------*/    
@ISCO_EMPR       TD_VC_003,    
@ISCO_USUA_MODI  TD_VC_008,    
@ISCO_PROV       TD_VC_020,    
@ISCO_TIPO_DOCU  TD_VC_003,    
@ISNU_DOCU_PROV  TD_VC_020,    
@ISTI_DOCU_ORIG  TD_VC_003,    
@ISNU_DOCU_ORIG  TD_VC_020,    
@ISTI_DOCU_GUIN  TD_VC_003,    
@ISNU_DOCU_GUIN  TD_VC_020,    
@INNU_CORR       TD_IN_001,    
@ISCO_UNID       TD_VC_003,    
@ISCO_ALMA       TD_VC_003  
 As  
DECLARE    
  @VDFE_USUA_MODI  TD_DT_001,    
    
  @VSST_CNTR_PRES  TD_VC_001,     
  @VNAA_CNTR       TD_IN_001,     
  @VNMM_CNTR       TD_IN_001,     
  @VNNU_FETC_0001  TD_IN_001, /* Status del cursor */    
  @CSCO_PART    TD_VC_020,     
  @VSTI_SITU    TD_VC_003,     
  @VSST_CNTR_PARA  TD_VC_001,     
  @VNIM_PART     TD_NU_016_004,     
  @VNCA_PART       TD_IN_001,    
  @VSVA_MENS     TD_VC_100,     
  @VNIM_SALD    TD_NU_016_004,     
  @VSST_SIGN    TD_VC_001,     
  @VNIM_REAL    TD_NU_016_004,     
  @VSCO_MONE_PART  TD_VC_003,     
  @VNIM_UNIT    TD_NU_016_004,     
  @VSCO_MONE_ORCO  TD_VC_003,     
  @VDFE_EMIS_ORCO  TD_DT_001,     
  @VDFE_EMIS_DOCU  TD_DT_001,     
  @VSTI_CAMB    TD_VC_001,     
  @VSTI_ORIG    TD_VC_001,     
  @VSCO_MONE_NACI  TD_VC_003,     
  @VSCO_MONE_EXTR  TD_VC_003,     
  @VNIM_COMP_ORCO  TD_NU_016_004,       
  @VNFA_CAMB_DOCU  TD_NU_016_004,     
  @VNFA_CAMB_ORCO  TD_NU_016_004,     
  @VSTI_CAMB_LOGI  TD_VC_001,     
  @VSTI_ORIG_LOGI  TD_VC_001,    
  @VSMO_NACI_LOGI  TD_VC_003,      
  @VSMO_EXTR_LOGI  TD_VC_003,       
  @VNIM_COMP       TD_NU_016_004,     
  @VNNU_REGI_EMPR  TD_IN_001,    
  @VSCO_UNID_CNTB  TD_VC_003,    
  @VSCO_TIAU_PROV  TD_VC_001,    
  @VNIM_MVTO_CNTB  TD_NU_016_004,    
  @VNNU_SECU_PRES  TD_IN_001,    
  @VSCO_MONE_DOCU  TD_VC_003,    
  @VSST_PRES       TD_VC_001    
    
BEGIN    
    
Begin Tran SP_TDORDE_FACT_D01    
  
Select @VSTI_CAMB = TI_CAMB, @VSTI_ORIG = TI_ORIG       
From TTFACA_OPCI        
Where CO_EMPR = @ISCO_EMPR        
  And CO_MODU = 'TEEM0001'        
  And CO_MENU = 'FTEEMBA'        
        
If ( @VSTI_CAMB Is Null Or @VSTI_ORIG Is Null )        
 Select  @VSTI_CAMB = TI_CAMB,       
   @VSTI_ORIG = TI_ORIG,       
   @VSCO_MONE_NACI = CO_MONE_DEFA,       
   @VSCO_MONE_EXTR = CO_MONE_EXTR,      
   @VSCO_TIAU_PROV = CO_TIAU_PROV,  
   @VSST_PRES = ST_PRES      
 From    TMPARA_TESO      
 Where   CO_EMPR = @ISCO_EMPR       
Else        
 Select  @VSCO_MONE_NACI = CO_MONE_DEFA,       
   @VSCO_MONE_EXTR = CO_MONE_EXTR,      
   @VSCO_TIAU_PROV = CO_TIAU_PROV,  
   @VSST_PRES = ST_PRES      
 From    TMPARA_TESO      
 Where   CO_EMPR = @ISCO_EMPR       
  
    
 Delete TDORDE_FACT       
 Where  CO_EMPR = @ISCO_EMPR    
 And    CO_PROV = @ISCO_PROV     
 And    CO_TIPO_DOCU = @ISCO_TIPO_DOCU    
 And    NU_DOCU_PROV = @ISNU_DOCU_PROV    
 And    NU_CORR = @INNU_CORR    
   
 If @@error <> 0    
 Begin    
  Rollback tran SP_TDORDE_FACT_D01   
  Return    
 End        
   
 SELECT @VDFE_USUA_MODI = Getdate()    
   
 If @ISTI_DOCU_GUIN is not Null AND LTRIM(RTRIM(@ISTI_DOCU_GUIN)) != ''    
 Begin              
  Update  TCDOCU_ALMA     
  Set  ST_TESO = 'N', CO_USUA_MODI = @ISCO_USUA_MODI, FE_USUA_MODI = @VDFE_USUA_MODI    
  Where   NU_DOCU = @ISNU_DOCU_GUIN    
  And     TI_DOCU = @ISTI_DOCU_GUIN    
  And     CO_ALMA = @ISCO_ALMA    
  And     CO_UNID = @ISCO_UNID    
  And     CO_EMPR = @ISCO_EMPR    
  And     NU_ORCO = @ISNU_DOCU_ORIG     
   
  If @@error <> 0    
  Begin    
   Rollback tran SP_TDORDE_FACT_D01  
   Return    
  End        
   
 End    
 Else    
 Begin    
  
  Select @VNIM_COMP_ORCO = Sum(dbo.FN_TCFACT_CAMB_Q02(T1.CO_MONE, t2.CO_MONE, T1.FE_EMIS,  
     t2.IM_CONV,  
          @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, t1.FA_TIPO_CAMB))   
  From TMDOCU_PROV T1, TDORDE_FACT T2  
  Where   
   T1.CO_EMPR = @ISCO_EMPR and  
     
   T1.CO_EMPR = T2.CO_EMPR And  
   T1.CO_PROV = T2.CO_PROV And  
   T1.CO_TIPO_DOCU = T2.CO_TIPO_DOCU And  
   T1.NU_DOCU_PROV = T2.NU_DOCU_PROV And  
   T1.CO_ESTA_DOCU != 'ANU' And  
   t2.TI_DOCU_GUIN is Null And  
   t2.NU_DOCU_GUIN is Null And      
   T2.NU_DOCU_ORIG = @ISNU_DOCU_ORIG  
  
  
  Update  TCORDE_COMP      
   Set  ST_TESO = Case When Round(IM_BRUT_AFEC + IM_BRUT_INAF - (IM_DCT1 + IM_DCT2),2) - Round(IsNull(@VNIM_COMP_ORCO, 0),2) > 0.00  
        Then 'N' Else 'S'   
       End,       
    CO_USUA_MODI = @ISCO_USUA_MODI, FE_USUA_MODI = Getdate()    
  Where   NU_ORCO = @ISNU_DOCU_ORIG    
  And     CO_EMPR = @ISCO_EMPR    
   
  If @@error <> 0    
  Begin    
   Rollback tran SP_TDORDE_FACT_D01  
   Return    
  End        
 End    
   
 If Not Exists ( Select * From TDORDE_FACT    
   Where CO_EMPR = @ISCO_EMPR    
   And   CO_PROV = @ISCO_PROV     
   And   CO_TIPO_DOCU = @ISCO_TIPO_DOCU    
   And   NU_DOCU_PROV = @ISNU_DOCU_PROV )      
   
 Begin     
  Update  TMDOCU_PROV     
  Set  ST_ORIG_COSE = NULL, CO_USUA_MODI = @ISCO_USUA_MODI, FE_USUA_MODI = Getdate()    
  Where   CO_EMPR = @ISCO_EMPR    
  And     CO_PROV = @ISCO_PROV     
  And     CO_TIPO_DOCU = @ISCO_TIPO_DOCU    
  And     NU_DOCU_PROV = @ISNU_DOCU_PROV    
   
  If @@error <> 0    
  Begin    
   Rollback tran  SP_TDORDE_FACT_D01  
   Return    
  End        
 End    
   
   
 /*IF @VSST_PRES = 'S'    
 BEGIN    
 --------------- CONTROL PRESUPUESTAL (INICIO) ---------------    
 --Para control de presupuestos    
   
 Select  @VNAA_CNTR = Year(FE_EMIS),     
 @VNMM_CNTR = Month(FE_EMIS),     
 @VDFE_EMIS_DOCU = FE_EMIS,     
 @VNFA_CAMB_DOCU = FA_TIPO_CAMB,    
 @VSCO_UNID_CNTB = CO_UNID_CONC,    
 @VSCO_MONE_DOCU = CO_MONE    
 From TMDOCU_PROV    
 Where CO_EMPR = @ISCO_EMPR    
 And CO_PROV = @ISCO_PROV    
 And CO_TIPO_DOCU = @ISCO_TIPO_DOCU    
 And NU_DOCU_PROV = @ISNU_DOCU_PROV    
   
 Select @VSST_CNTR_PRES = ST_CNTR_PRES,     
 @VNNU_REGI_EMPR = NU_REGI_EMPR    
 From TMPARA_PRES    
 Where CO_EMPR = @ISCO_EMPR    
 And NU_ANNO = @VNAA_CNTR    
   
 Select @VSCO_MONE_ORCO = CO_MONE,     
 @VDFE_EMIS_ORCO = FE_EMIS,     
 @VNFA_CAMB_ORCO = FA_CAMB    From   TCORDE_COMP     
 Where  CO_EMPR = @ISCO_EMPR     
 And    NU_ORCO = @ISNU_DOCU_ORIG     
   
 Select  @VSTI_CAMB = TI_CAMB,     
 @VSTI_ORIG = TI_ORIG,     
 @VSCO_MONE_NACI = CO_MONE_DEFA,     
 @VSCO_MONE_EXTR = CO_MONE_EXTR,    
 @VSCO_TIAU_PROV = CO_TIAU_PROV    
 From    TMPARA_TESO    
 Where   CO_EMPR = @ISCO_EMPR     
   
 Select  @VSTI_CAMB_LOGI = TI_OFIC_MERC,     
 @VSTI_ORIG_LOGI = TI_COMP_VENT,     
 @VSMO_NACI_LOGI = CO_MONE_NACI,     
 @VSMO_EXTR_LOGI = CO_MONE_EXTR     
 From    TMPARA_LOGI    
 Where   CO_EMPR = @ISCO_EMPR     
   
 -- Se obtiene el signo del documento para hacer el update adecuado    
 Select  @VSST_SIGN = ST_SIGN    
 From    TTDOCU_CNTB    
 Where   TI_DOCU = @ISCO_TIPO_DOCU    
   
 If @VSST_CNTR_PRES = 'S'    
 Begin    
   
 Declare CU_TDORDE_FACT_I01_1 Cursor     
 For    
 Select  Distinct(CO_PART)    
 From   TDORDE_COMP    
 Where  NU_ORCO = @ISNU_DOCU_ORIG    
 And CO_EMPR = @ISCO_EMPR    
 And CO_PART is not null    
 And Rtrim(Ltrim(CO_PART)) != ''    
   
   
 -- Abre Cursor de Interfase - Cabecera     
 Open CU_TDORDE_FACT_I01_1    
 Fetch  CU_TDORDE_FACT_I01_1 Into @CSCO_PART    
   
 Select @VNNU_FETC_0001 = @@FETCH_STATUS    
   
 While (@VNNU_FETC_0001 = 0)    
 Begin    
 If (@VNNU_FETC_0001 < 0)    
  Begin    
   RAISERROR 20001 'FIN DE ARCHIVO'     
   CLOSE CU_TDORDE_FACT_I01_1     
   DEALLOCATE CU_TDORDE_FACT_I01_1     
   RETURN     
  End            
   
 If Exists( Select CO_EMPR    
 From   TRSIST_PART    
 Where  CO_EMPR = @ISCO_EMPR    
 And NU_ANNO = @VNAA_CNTR    
 And CO_SIST = 'OFITESO'    
 And CO_PART = @CSCO_PART)    
   
 Begin    
   
 Select @VSTI_SITU = TI_SITU,     
 @VSST_CNTR_PARA = ST_CNTR_PRES,     
 @VSCO_MONE_PART = CO_MONE    
 From  TMPART    
 Where  CO_EMPR = @ISCO_EMPR     
 And NU_ANNO = @VNAA_CNTR     
 And CO_PART = @CSCO_PART     
   
 If @VSTI_SITU = 'ACT' And @VSST_CNTR_PARA = 'S'    
 Begin    
   
 Select @VNIM_PART = Isnull(Sum(Isnull(T1.CA_DOCU_MOVI*T1.IM_COST_COMP, 0)), 0),    
 @VNCA_PART = Isnull(Sum(Isnull(T1.CA_DOCU_MOVI, 0)), 0)    
 From   TDDOCU_ALMA T1, TDORDE_COMP T2    
 Where  T1.NU_DOCU = @ISNU_DOCU_GUIN    
 And    T1.TI_DOCU = @ISTI_DOCU_GUIN     
 And    T1.CO_EMPR = @ISCO_EMPR     
 And    T1.NU_SECU_ORCO = T2.NU_SECU    
 And    T1.NU_ORCO = T2.NU_ORCO    
 And    T1.CO_EMPR = T2.CO_EMPR    
 And    T1.TI_SITU = 'ACT'    
 And    T2.CO_PART = @CSCO_PART          
   
 Select @VNIM_PART = Round(@VNIM_PART ,2)    
   
 --Se convierte el valor a la moneda de la partida    
 Select @VNIM_COMP = (Select OFITESO_VER5.dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_ORCO,      
 @VSCO_MONE_PART, @VDFE_EMIS_ORCO, @VNIM_PART, @VSTI_ORIG_LOGI,    
 @VSTI_CAMB_LOGI , 'S', @VSMO_NACI_LOGI, @VSMO_EXTR_LOGI, @VNFA_CAMB_ORCO))    
   
   
 --Se convierte el valor a la moneda de la partida    
 Select @VNIM_REAL = (Select OFITESO_VER5.dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_ORCO,     
 @VSCO_MONE_PART, @VDFE_EMIS_DOCU, @VNIM_PART, @VSTI_CAMB,     
 @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @VNFA_CAMB_DOCU))    
   
 --Se convierte el valor a la moneda de la contable    
 Select @VNIM_MVTO_CNTB = (Select OFITESO_VER5.dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_ORCO,      
 @VSMO_NACI_LOGI, @VDFE_EMIS_DOCU, @VNIM_PART, @VSTI_CAMB,    
 @VSTI_ORIG , 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @VNFA_CAMB_DOCU))    
   
 --Se ejecuta el SP para determinar si existe presupuesto para la partida    
 Exec OFIPRES..SP_TAPART_MENS_Q17 @ISCO_EMPR, @VNAA_CNTR, @VNMM_CNTR, 0, @CSCO_PART,     
 0, 0, @VNIM_REAL, @VNCA_PART, 'O', 'V', 'OFITESO', @VSVA_MENS Output, @VNIM_SALD Output      
   
 If Len(Isnull( Rtrim(Ltrim(@VSVA_MENS)), '')) = 0     
 Begin    
   
 -- Insertando en la Tabla TDMVTO_PART    
   
 SELECT @VNNU_SECU_PRES = ISNULL(MAX(NU_SECU),0) + 1    
 FROM  TDMVTO_PART    
 Where CO_EMPR = @ISCO_EMPR    
 AND   NU_ANNO = @VNAA_CNTR    
 AND   NU_MESE = @VNMM_CNTR    
 AND   NU_REGI_EMPR = @VNNU_REGI_EMPR    
 AND   CO_PART = @CSCO_PART       
   
 Insert into TDMVTO_PART (CO_EMPR, NU_ANNO, NU_MESE, NU_REGI_EMPR, CO_PART, NU_SECU, TI_ORIG_MVTO,    
 CO_SIST_ORIG, CO_UNID_CNTB, TI_AUXI_EMPR, CO_AUXI_EMPR, TI_DOCU, NU_DOCU,    
 FE_DOCU, CO_MONE, FA_CAMB, IM_MVTO_ORIG, IM_MVTO_CNTB, IM_MVTO_PART,     
 CN_CANT, NU_DOCU_ORCO, CO_USUA_CREA,FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI)    
 Values  (@ISCO_EMPR, @VNAA_CNTR, @VNMM_CNTR, @VNNU_REGI_EMPR,@CSCO_PART, @VNNU_SECU_PRES,    
 'EJE', 'OFITESO', @VSCO_UNID_CNTB, @VSCO_TIAU_PROV, @ISCO_PROV, @ISCO_TIPO_DOCU,    
 @ISNU_DOCU_PROV,  @VDFE_EMIS_DOCU, @VSCO_MONE_DOCU, @VNFA_CAMB_DOCU, @VNIM_PART,    
 @VNIM_MVTO_CNTB,  @VNIM_REAL, @VNCA_PART, @ISNU_DOCU_ORIG, @ISCO_USUA_MODI,GETDATE(), @ISCO_USUA_MODI, GETDATE())    
   
 If @@error <> 0    
 Begin    
 Close CU_TDORDE_FACT_I01_1    
 Deallocate CU_TDORDE_FACT_I01_1    
 Rollback tran    
 Return    
 End    
   
 If @VSST_SIGN = 'S'    
 Update  TAPART_MENS    
 Set     IM_COMP = Isnull(IM_COMP,0) + @VNIM_COMP,     
 CN_COMP = Isnull(CN_COMP,0) + @VNCA_PART,     
 IM_EJEC = Isnull(IM_EJEC,0) - @VNIM_REAL,     
 CN_REAL = Isnull(CN_REAL,0) - @VNCA_PART,    
 FE_USUA_MODI = GETDATE(),    
 CO_USUA_MODI = @ISCO_USUA_MODI    
 Where   CO_EMPR = @ISCO_EMPR     
 And NU_ANNO = @VNAA_CNTR     
 And NU_MESE = @VNMM_CNTR     
 And NU_REGI_EMPR = @VNNU_REGI_EMPR    
 And CO_PART = @CSCO_PART    
   
 If @@error <> 0    
 Begin    
 Close CU_TDORDE_FACT_I01_1    
 Deallocate CU_TDORDE_FACT_I01_1    
 Rollback tran    
 Return    
 End    
   
   
 If @VSST_SIGN = 'N'    
 Update  TAPART_MENS    
 Set     IM_COMP = Isnull(IM_COMP,0) - @VNIM_COMP,     
 CN_COMP = Isnull(CN_COMP,0) - @VNCA_PART,     
 IM_EJEC = Isnull(IM_EJEC,0) + @VNIM_REAL,     
 CN_REAL = Isnull(CN_REAL,0) + @VNCA_PART,    
 FE_USUA_MODI = GETDATE(),       
 CO_USUA_MODI = @ISCO_USUA_MODI    
 Where   CO_EMPR = @ISCO_EMPR     
 And NU_ANNO = @VNAA_CNTR     
 And NU_MESE = @VNMM_CNTR     
 And NU_REGI_EMPR = @VNNU_REGI_EMPR    
 And CO_PART = @CSCO_PART    
   
 If @@error <> 0    
 Begin    
 Close CU_TDORDE_FACT_I01_1    
 Deallocate CU_TDORDE_FACT_I01_1    
 Rollback tran    
 Return    
 End       
 End     
   
 End    
   
 End    
   
   
 Fetch  CU_TDORDE_FACT_I01_1 Into @CSCO_PART    
   
 Select @VNNU_FETC_0001 = @@FETCH_STATUS    
   
 End --del cursor    
   
   
 Close CU_TDORDE_FACT_I01_1    
 Deallocate CU_TDORDE_FACT_I01_1    
   
   
 End --del If    
 END    
 --------------- CONTROL PRESUPUESTAL (FIN) ---------------    
*/    
Commit Tran    
END    
/*-------------------------- Fin ------------------------------*/


GO
